package cn.zhonghuanzhiyuan.sprc.common.utils;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.beanutils.MethodUtils;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * 该工具类封装的最初方法是isExistMethod、invokeMethod
 * 目的：捕获异常，防止终止程序流，如果此方法不存在或者调用错误，其他方法继续赋值执行
 * @author 涛哥
 * @version 1.0
 * @date 2024-02-25 8:59
 */
@Slf4j
public class ReflectionUtil {


    /**
     * 是否存在某个方法
     * @param
     * @param methodName
     * @return
     */
    public static boolean  isExistMethod( Object object,String  methodName,Class<?>... parameterTypes){

        try {
            // 查询公共方法
            object.getClass().getMethod(methodName, parameterTypes);
            return   true;
        } catch (NoSuchMethodException e) {
            return  false;
        }

    }


    /**
     * 调用方法 失败捕获异常
     * @param target
     * @param methodName
     * @param args
     */
    public   static  void    invokeMethod(Object target, String methodName, Object args){
        try {
            MethodUtils.invokeMethod(target, methodName, args);
        } catch (Exception e) {
            log.debug("{}不存在对象{}中,赋值失败",methodName,target.getClass().getName());
        }

    }
}
